package everydayone.hasGroupsSize;

import java.util.HashMap;
import java.util.Map;

/**
 * @Date 2020/03/27
 * @author 王光浩
 * @Thinking 获取数组中所有元素出现的次数，然后得到最小出现次数，如果最小出现次数等于1，则返回false，然后重
 * @         开始，知道最小出现次数结束，如果在这中间有一个数能够被所有的元素次数整除，则返回true，否则返回false。
 * @Analysis 时间复杂度O（n^2）,空间复杂度O（n）
 */
public class MyMethodOne {
	public boolean hasGroupsSizeX(int[] deck) {
		HashMap<Integer,Integer> map=new HashMap<Integer,Integer>(); //保存元素的出现次数
		for(int tem:deck)
			map.put(tem, map.getOrDefault(tem, 0)+1);
		//获取最小值
		int min=Integer.MAX_VALUE;
		for(Map.Entry<Integer, Integer> entry:map.entrySet())
			min=min>entry.getValue()?entry.getValue():min;
		if(min<=1)return false;
		//判断是否存在这个数（如果采用2-min,则会产生许多不必要的运算，由题意可以这个数一定是min的因数）
		int count=2;
		for(int i=min;i>=2;i=min/count) {
			boolean flag=true;
			for(Map.Entry<Integer, Integer> entry:map.entrySet()) {
				if(entry.getValue()%i!=0) {
					flag=false;
					break;
				}
			}
			if(flag)return true;
			while(min%count!=0) {
				count++;
			}
		}
		return false;
    }
}
